// index.ts
// 获取应用实例
const app = getApp<IAppOption>()
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'

Page({
  data: {
    motto: 'Hello World',
    userInfo: {
      avatarUrl: defaultAvatarUrl,
      nickName: '',
    },
    hasUserInfo: false,
    canIUseGetUserProfile: wx.canIUse('getUserProfile'),
    canIUseNicknameComp: wx.canIUse('input.type.nickname'),
    isAdmin: false, // 是否为管理员
    activities: [] as any[],
    loading: false
  },

  onLoad() {
    // 页面加载时获取活动列表
    this.getActivityList()
    
    // 检查管理员权限
    this.checkAdminPermission()
  },

  onShow() {
    // 页面显示时重新检查管理员权限（用户可能在其他页面登录/退出）
    this.checkAdminPermission()
    
    // 刷新活动列表
    this.getActivityList()
  },

  // 检查管理员权限
  async checkAdminPermission() {
    try {
      // 获取本地存储的用户信息
      const userInfo = wx.getStorageSync('userInfo')
      
      if (!userInfo || !userInfo.openId) {
        // 用户未登录，不是管理员
        this.setData({ isAdmin: false })
        console.log('用户未登录，无管理员权限')
        return
      }

      // 调用云函数检查管理员权限
      const result = await wx.cloud.callFunction({
        name: 'getUserInfo',
        data: {
          action: 'checkAdmin'
        }
      })

      const response = result.result as any
      if (response && response.success) {
        const isAdmin = response.data.isAdmin || false
        this.setData({ isAdmin })
        console.log('管理员权限检查结果:', isAdmin)
      } else {
        this.setData({ isAdmin: false })
        console.log('管理员权限检查失败:', response?.message)
      }
    } catch (error) {
      console.error('检查管理员权限失败:', error)
      this.setData({ isAdmin: false })
    }
  },

  // 获取活动列表
  async getActivityList() {
    this.setData({ loading: true })
    
    try {
      const result = await wx.cloud.callFunction({
        name: 'activityManager',
        data: {
          action: 'getList',
          status: 'all' // 获取所有状态的活动，在前端进行筛选
        }
      })

      const response = result.result as any
      if (response && response.success) {
        const activities = response.data.activities || []
        
        console.log('云函数返回的原始活动数据:', activities)
        
        // 处理活动数据，确保所有字段都正确
        const processedActivities = activities.map((activity: any) => {
          const now = new Date()
          let statusText = '草稿'
          let statusClass = 'status-draft'
          let timeRange = ''
          
          // 计算时间范围和状态
          if (activity.startTime && activity.endTime) {
            const startDate = new Date(activity.startTime)
            const endDate = new Date(activity.endTime)
            
            // 格式化时间范围
            const formatDate = (date: Date) => {
              const year = date.getFullYear()
              const month = date.getMonth() + 1
              const day = date.getDate()
              return `${year}.${month}.${day}`
            }
            
            timeRange = `${formatDate(startDate)} - ${formatDate(endDate)}`
            
            // 根据时间判断实际状态
            if (activity.status === 'ongoing') {
              if (now < startDate) {
                statusText = '未开始'
                statusClass = 'status-pending'
              } else if (now > endDate) {
                statusText = '已结束'
                statusClass = 'status-ended'
              } else {
                statusText = '进行中'
                statusClass = 'status-ongoing'
              }
            } else if (activity.status === 'paused') {
              statusText = '已暂停'
              statusClass = 'status-paused'
            } else if (activity.status === 'ended') {
              statusText = '已结束'
              statusClass = 'status-ended'
            } else if (activity.status === 'draft') {
              statusText = '草稿'
              statusClass = 'status-draft'
            }
          } else if (activity.status === 'ongoing') {
            // 如果状态为ongoing但没有时间信息，默认显示为进行中
            statusText = '进行中'
            statusClass = 'status-ongoing'
            timeRange = '进行中'
          } else if (activity.status === 'paused') {
            statusText = '已暂停'
            statusClass = 'status-paused'
          } else if (activity.status === 'ended') {
            statusText = '已结束'
            statusClass = 'status-ended'
          } else if (activity.status === 'draft') {
            statusText = '草稿'
            statusClass = 'status-draft'
          }
          
          return {
            _id: activity._id,
            title: activity.title || '未命名活动',
            description: activity.description || '',
            coverUrl: activity.coverUrl || '', // 保持原始coverUrl，让模板处理默认图片
            timeRange: timeRange,
            statusText: statusText,
            statusClass: statusClass,
            participantCount: activity.participantCount || 0,
            totalVotes: activity.totalVotes || 0,
            status: activity.status,
            progress: Math.min(100, (activity.totalVotes || 0) / 10) // 简单的进度计算
          }
        })
        
        // 只显示进行中的活动
        const ongoingActivities = processedActivities.filter((activity: any) => {
          // 显示所有状态为ongoing的活动，无论其时间状态如何
          // 这样可以确保从暂停状态恢复的活动能够正常显示
          return activity.status === 'ongoing'
        })
        
        this.setData({
          activities: ongoingActivities
        })
        
        console.log('获取活动列表成功:', ongoingActivities.length, '个进行中的活动')
        console.log('活动数据:', ongoingActivities)
      } else {
        console.error('获取活动列表失败:', response?.message)
        this.setData({ activities: [] })
      }
    } catch (error) {
      console.error('获取活动列表失败:', error)
      this.setData({ activities: [] })
    } finally {
      this.setData({ loading: false })
    }
  },

  // 跳转到活动详情页
  goToActivityDetail(e: any) {
    const id = e.currentTarget.dataset.id
    wx.navigateTo({
      url: `/pages/activity/detail/index?id=${id}`
    })
  },

  // 跳转到管理页面
  goToAdmin() {
    // 双重检查管理员权限
    if (!this.data.isAdmin) {
      wx.showToast({
        title: '您没有管理员权限',
        icon: 'none',
        duration: 2000
      })
      return
    }

    wx.navigateTo({
      url: '/pages/admin/activity/index'
    })
  },

  // 图片加载成功
  onImageLoad(e: any) {
    console.log('图片加载成功:', e.detail)
  },

  // 图片加载失败
  onImageError(e: any) {
    console.log('图片加载失败:', e.detail)
    // 可以在这里设置默认图片
  },

  methods: {
    // 事件处理函数
    onChooseAvatar(e: any) {
      const { avatarUrl } = e.detail
      const { nickName } = this.data.userInfo
      this.setData({
        "userInfo.avatarUrl": avatarUrl,
        hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
      })
    },
    onInputChange(e: any) {
      const nickName = e.detail.value
      const { avatarUrl } = this.data.userInfo
      this.setData({
        "userInfo.nickName": nickName,
        hasUserInfo: nickName && avatarUrl && avatarUrl !== defaultAvatarUrl,
      })
    },
    getUserProfile() {
      // 推荐使用wx.getUserProfile获取用户信息，开发者每次通过该接口获取用户个人信息均需用户确认，开发者妥善保管用户快速填写的头像昵称，避免重复弹窗
      wx.getUserProfile({
        desc: '展示用户信息', // 声明获取用户个人信息后的用途，后续会展示在弹窗中，请谨慎填写
        success: (res) => {
          console.log(res)
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    },
  },
})
